package com.yunxi.module.system.mapper.dept;

import com.yunxi.framework.common.pojo.PageResult;
import com.yunxi.framework.mybatis.core.mapper.BaseMapperX;
import com.yunxi.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.yunxi.module.system.model.dept.PostDO;
import com.yunxi.module.system.vo.admin.dept.post.PostPageReqVO;
import org.apache.ibatis.annotations.Mapper;

import java.util.Collection;
import java.util.List;

/**
 * <p>
 * 岗位 mapper
 * </p>
 *
 * @author lidy
 * @since 2024-05-08
 */
@Mapper
public interface PostMapper extends BaseMapperX<PostDO> {

    /**
     * 获得符合条件的岗位列表
     *
     * @param postIds  岗位编号集合。如果为空，不进行筛选
     * @param statuses 状态数组，如果为空，不进行筛选
     * @return 岗位列表
     */
    default List<PostDO> selectList(Collection<Long> postIds, Collection<Integer> statuses) {
        return selectList(new LambdaQueryWrapperX<PostDO>()
                .inIfPresent(PostDO::getId, postIds)
                .inIfPresent(PostDO::getStatus, statuses));
    }

    /**
     * 查询岗位分页列表
     *
     * @param reqVO 查询条件
     * @return 岗位分页列表
     */
    default PageResult<PostDO> selectPage(PostPageReqVO reqVO) {
        return selectPage(reqVO, new LambdaQueryWrapperX<PostDO>()
                .likeIfPresent(PostDO::getCode, reqVO.getCode())
                .likeIfPresent(PostDO::getName, reqVO.getCode())
                .eqIfPresent(PostDO::getStatus, reqVO.getStatus())
                .orderByDesc(PostDO::getSort));
    }

    /**
     * 根据岗位名称查询
     *
     * @param name 岗位名称
     * @return 岗位信息
     */
    default PostDO selectByName(String name) {
        return selectOne(PostDO::getName, name);
    }

    /**
     * 根据岗位编码查询
     *
     * @param code 岗位编码
     * @return 岗位信息
     */
    default PostDO selectByCode(String code) {
        return selectOne(PostDO::getCode, code);
    }
}
